package com.cskaoyan.javase._0encapsulate._0introduction;

/**
 * 狭义上的封装
 * 封装（encapsulate）是指将数据及相关操作绑定在一起的一种编程机制，使其构成一个不可分割的独立实体。
 * 具体来说,就是对外隐藏实现细节,只提供合理的方式让外界使用就可以了
 *
 * 语法实现上,封装依赖于访问权限修饰符来实现:
 * 数据尽量不要让外部直接访问，而是提供一些方法（“接口”）有选择地、可控制地让外界访问。
 *      1.不需要被外界知道的属性，在类中完全可以私有化。
 *      2.如何“有选择的、可控制的”提供给外界访问方式呢？
 *          就需要使用 Getter/Setter 方法。
 *
 * @since 15:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s = new Student();
        s.setAge(1000);
        // s.age = 18;
        // System.out.println(s.age);
        System.out.println(s.getAge());
    }
}

class Student {
    private int age;

    // 对外提供访问的Getter方法
    public int getAge() {
        return age;
    }

    // 对外提供赋值的Setter方法
    public void setAge(int age) {
        if (age < 1) {
            System.out.println("您活到过去了吗?");
            return;
        }
        if (age > 140) {
            System.out.println("您修仙了吗?请问您的境界是什么?");
            return;
        }
        this.age = age;
    }
}